package service.impl;

import dao.DatabaseConnectDao;
import model.DatabaseConnectParameter;
import model.DatabaseFrom;
import model.DatabaseFromColumn;
import model.DatabaseJsonModel;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author： 杨浩然
 * @date： 2023-01-31 17:48
 */
public class DatabaseConnectServiceImpl  {


    /**
     * 进行一次数据库连接，获取单表的信息，关闭数据库，适用于单表对比
     *
     * @param databaseType 数据库类型  DATEBASE_TYPE
     * @param url          地址  例如：192.168.10.15:54321/ibasem_jgswj
     * @param username     账号
     * @param password     密码
     * @return
     */
    public Map<String, DatabaseFromColumn> findDataBaseFrom(String databaseType, String fromname,String url,String schemaPattern, String username, String password) {
        DatabaseConnectParameter databaseConnectParameter = DatabaseConnectParameter.Create(databaseType, fromname, url,schemaPattern, username, password);
        Map<String, DatabaseFrom> dataBaseFrom = findDatabaseConnectParameter(databaseConnectParameter);
        DatabaseFrom databaseFrom = dataBaseFrom.get(fromname);
        return databaseFrom.getColumnMap();
    }

    /**
     * 进行一次数据库连接，获取多表的信息，关闭数据库，适用于多表
     *
     * @param databaseType 数据库类型  DATEBASE_TYPE
     * @param url          地址  例如：192.168.10.15:54321/ibasem_jgswj
     * @param username     账号
     * @param password     密码
     * @return
     */
    public Map<String, DatabaseFrom> findDataBaseFroms(String databaseType, Set<String> fromname, String url, String schemaPattern,String username, String password) {
        DatabaseConnectParameter databaseConnectParameter = DatabaseConnectParameter.Create(databaseType, fromname, url,schemaPattern, username, password);
        return findDatabaseConnectParameter(databaseConnectParameter);
    }

    /**
     * 实际数据库调用方法  进行一次数据库连接，获取多表的信息，关闭数据库
     * @param databaseConnectParameter
     * @return
     */
    public Map<String, DatabaseFrom> findDatabaseConnectParameter(DatabaseConnectParameter databaseConnectParameter) {
        DatabaseConnectDao databaseConnectDao = new DatabaseConnectDao();
        Map<String, DatabaseFrom> dataBaseFrom = databaseConnectDao.findDataBaseFroms(databaseConnectParameter);
        return dataBaseFrom;
    }

    /**
     * 从数据库加载表结构信息
     * @param djmList 主要数据类
     * @return
     */
    public List<DatabaseJsonModel> loadDatabaseJsonModel(List<DatabaseJsonModel> djmList) {
        for (DatabaseJsonModel djm : djmList) {
            //加载标准库数据 此处可能存在重复加载 后续可考虑做个冗余 但不可以做浅拷贝
            if (djm.getDcpStandard()!=null){
                djm.setDfStandardData(findDatabaseConnectParameter(djm.getDcpStandard()));
            }
            //加载对应库数据
            if (djm.getDcpContrast()!=null){
                djm.setDfContrastData(findDatabaseConnectParameter(djm.getDcpContrast()));
            }
        }
        return djmList;
    }


}
